<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <title>workNotetwo</title>
</head>

<body>
    <h1>第二天中级课内容：</h1>
    <h2>1、“script” 标签</h2>
    <p>主要是用来放置JS代码，可以放置在网页的任何位置，还可以并存多个，按照从上往下依次顺序执行，会阻塞当前html代码的执行，</p>
    <br>
    <h2>type 属性</h2>
    <p>值text/Javascript</p>
    <br>
    <h2>language 属性</h2>
    <p>值vbscript或javascript</p>
    <br>
    <h2>src属性</h2>
    <p>用来引入外部文件</p>
    <br>
    <hr>
    <h2>2、代码结构</h2>
    <p>script标签可以放置在head头部，body尾部，多个建议合并为一个，最好写在js文件里，从外部引入，最好用相对路径，引入文件标签不能再写其他代码，无特殊说明一定在外部写，</p>
    <br>
    <h2>3、 现代模式，"use strict"</h2>
    <p>在script标签里写“use strict”或‘use strict’在代码开始位置是全局检查，无特殊说明一定加上</p>
    <br>
    <hr>
    <h2>4、 变量</h2>
    <p>var $ = 100;</p>
    <p>var _ = 200;</p>
    <p>命名规则：不能以数字开始，可以有$,_;</p>
    <P>
        定义：可以用let，const（常量），申明变量，一般不考虑var,优先用const，其次用let，兼容性问题用var，严格区分大小写，不能使用系统关键字命名变量，
        异常的变量名错误：Unexpected token “你的申明变量名”。
    </P>
    <hr>
    <h2>5、数据类型（*重要）</h2>
    <p>有Number，String，Boolean，Array，undefined，Object等类型</p>
    <br>
    <hr>
    <h2>6、类型转换</h2>
    <p>
        自动转换（隐形转换）：两种不同数据类型发生运算的时候会发生类型转换，不可以将两种或两种以上的数据类型进行运算
        强制转换（显性转换）：Number()；NaN数值类型是Number；parseInt();String();Boolean('',0,false,undefind,null,{},[]
        ,NaN)除{},[]其余都会转换的值是false；Object()；
    </p>
    <br>
    <h2>7、运算符</h2>
    <p>typeof + 值或变量</p>
    <p>const a = typeof 100;//number</p>
    <p>const b = typeof "100";//string</p>
    <p>const c = typeof false;//boolean</p>
    <p>const d = typeof undefined;//undefined</p>
    <p>const e = typeof null;//object</p>
    <p>const f = typeof NaN;//number</p>
    <p>const g = typeof [];//object</p>
    <p>const h = typeof {};//object</p>
    <br>
    <p>任何数字和NaN运算结果都是NaN；</p>
    <br>
    <p>const c = a + (+b)对b进行数字转换;</p>
    <br>
    <h2>8、值的比较</h2>
    <p>一元运算符：- + 从广义上(typeof);</p>
    <p>二元运算符：- +；</p>
    <P>三元运算符：const a = 1< 2?1:0;不建议嵌套;</P> <p>++a立即自增；a++无特殊情况写为(a = a + 1),执行完当前在自增；</p>
    <p>==只比较值不比较数据类型；===值与数据类型都比较，一般用这个；</p>
    <p>任何与-+Infinity运算都等于其本身，两个Infinity运算等于NaN；</p>
    <br>
    <hr>
    <h2>9、交互：alert、prompt 和 confirm</h2>
    <h2>10、条件运算符：if 和 '?'</h2>
    <h2>11、逻辑运算符</h2>
    <h2>12、循环：while 和 for</h2>
    <p>for（这里的表达式可以不写，可以写外面）</p>
    <p>for(let a = 0(这执行一次); a < 3 ;a=a+1 ){};let局部变量，var全局变量</p>
    <p>无预兆合成错误:Uncaught SyntaxError: Identifier 'a' has already been declared(变量已申明)；</p>
    <p>未捕获的引用错误:Uncaught ReferenceError: i is not defined（变量未申明）；</p>
    <p>break结束循环剩余代码循环也结束；continue结束循环剩余代码继续循环；</p>
    <p>计算循环的时间：</p>
    <p>console.time();</p>
    <p>for(let i=0;i < 100;i=i+1){</p>
     <br>
    <p>}</p>
    <p>console.timeEnd();</p>
    <br>
    <h2>13、"switch" 语句</h2>
    <p>程序从匹配到的位置开始往下执行，可以加break中断程序往下执行，中断根据需求添加，位置根据需求调节；</p>
    <br>
    <h2>14、函数</h2>
    <p>定义：函数名等同于变量名，数据类型是Object；</p>
    <p>表达式定义方式（匿名函数）：const add = function(a=0,b=0){</p>
    <p>return a+b;</p>
    <p>}；</p>
    <br>
    <p>const a = 123;</p>
    <br>
    <p>
        function add(){
        <br>
        const b = 100;
        <br>
        console.log(b);
        <br>
        function sub(){
        <br>
        const c = 100;
        <br>
        console.log(c);
        <br>
        }
        <br>
        sub();
        <br>
        }
        <br>
        add();
        <br>
        console.log(a);
        <br>
        变量的作用域（函数内变量可见范围）：
        <br>
        let a = 100;
        <br>
        function fun1(){
        <br>
        let b = 200;
        <br>
        console.log(a);
        <br>
        }
        <br>
        fun1();
        <br>

        console.log(b);// error错误
        <br>
        console.log(a);
        <br>
        函数的实际参数，形式参数：
        <br>
        let name； 等于 let name = undefined;
        <br>
        function add(a = 0,b = 0)形式参数 其后面的值是【参数默认值】{
        <br>
        // const a ;
        <br>
        // const b ;
        <br>
        console.log(a+b);
        <br>
        }
        <br>
        add(100，200);传参给变量重新赋值（实际参数）；
        <br>
        返回值：
        <br>
        function add(a=0,b=0){
        <br>
        return a+b;
        <br>
        }
        <br>
        const res = add(100,200);
        <br>
        console.log(res);
        <br>

    </p>
    <hr>
    <h2>16、函数表达式</h2>
    <p>
        回调函数：
        <br>
        const add = function(fn){
        <br>
            fn = function(){
        <br>        
                console.log("hello");
        <br>
            };
        <br>
            fn();//hello
        <br>
        };
        <br>
        add(function(){
        <br>
        console.log("hello");
        <br>
        });
        <br>
        变量/函数值（）；
        <br>
        函数类型（）；
        <br>
        类型错误：Uncaught TypeError: a is not a function（a不是函数的值）；
        <br>

        立即执行函数：
        <br>
        const a = function(){};
        <br>
        a();
        <br>

        (function(a,b){
        <br>
            console.log(a,b);
        <br>
        })(1,3);
        <br>

        ES6规范：const,let,默认值;
        <br>
    </p>
    <h2>17、箭头函数，基础知识</h2>
    <p>
        const add = function(a,b){
        <br>
            console.log(a,b);
        <br>
        };
        <br>
        const add = (a)=>{
        <br>
            console.log(a);
        <br>
        };
        <br>
        const add = a =>{
        <br>
            return 100;
        <br>
        };
        <br>
        const add = a => 100;
        <br>
    </p>
    <h2>18、JavasScript 特性</h2>
</body>

</html>